package com.atguigu.tingshu.album.api;

import com.atguigu.tingshu.album.service.AlbumInfoService;
import com.atguigu.tingshu.common.annotation.login.LoginRequired;
import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.common.util.AuthContextHolder;
import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.atguigu.tingshu.vo.album.AlbumListVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 专辑管理
 *
 * @author sun
 */
@RestController
@RequestMapping("/api/album/albumInfo")
public class AlbumInfoController {

    @Resource
    private AlbumInfoService albumInfoService;


    /**
     * 新增专辑
     *
     * @param albumInfoVo 专辑Vo信息
     */
    @PostMapping("/saveAlbumInfo")
    @LoginRequired
    public Result<Integer> save(@RequestBody @Validated AlbumInfoVo albumInfoVo) {
        albumInfoService.saveAlbumInfo(albumInfoVo);
        return Result.ok();
    }

	/**
	 * 根据条件分页查询用户专辑
	 * @param albumInfoQuery  查询条件
	 * @param page 页
	 * @param size 页大小
	 */
    @PostMapping("/findUserAlbumPage/{page}/{size}")
    @LoginRequired
    public Result<IPage<AlbumListVo>> findUserAlbumPage(
			@RequestBody AlbumInfoQuery albumInfoQuery,
			@PathVariable("page") Long page,
			@PathVariable("size") Long size
	) {
		albumInfoQuery.setUserId(AuthContextHolder.getUserId());
        return Result.ok(albumInfoService.findUserAlbumPage(albumInfoQuery, page, size));
    }

    /**
     * 删除专辑
     * @param albumId 专辑id
     */
    @DeleteMapping("/removeAlbumInfo/{albumId}")
    @LoginRequired
    public Result<Integer> removeAlbumInfo(@PathVariable("albumId") Long albumId) {
        return Result.ok(albumInfoService.removeAlbumInfo(albumId));
    }

    /**
     * 根据专辑id查询专辑信息--用于专辑修改的信息显示
     * @param albumId 专辑id
     * @return  专辑信息，不包含统计信息
     */
    @GetMapping("/getAlbumInfo/{albumId}")
    @LoginRequired
    public Result<AlbumInfo> getAlbumInfo(@PathVariable("albumId") Long albumId){

        return Result.ok(albumInfoService.getAlbumInfo(albumId));
    }


    /**
     * 修改专辑信息
     * @param albumId 专辑id
     * @param albumInfoVo 专辑信息
     */
    @PutMapping("/updateAlbumInfo/{albumId}")
    @LoginRequired
    public Result<Integer> updateAlbumInfo(@PathVariable("albumId") Long albumId,
                                           @RequestBody @Validated AlbumInfoVo albumInfoVo
    ){
        return Result.ok(albumInfoService.updateAlbumInfo(albumId,albumInfoVo));
    }

    /**
     * 获取当前用户的专辑列表信息---包含专辑id和专辑标题
     * @return 专辑信息列表 包含专辑id和专辑标题
     */
    @GetMapping("/findUserAllAlbumList")
    @LoginRequired
    public Result<List<AlbumInfo>> findUserAllAlbumList(){
        return Result.ok(albumInfoService.findUserAllAlbumList());
    }


}

